package Java2Test.mythread.threadcase3;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * 多线程的第三种实现方式：使用Callable接口和FutureTask类
 * 特点：可以获取多线程运行的结果
 * 实现步骤：
 * 1. 创建一个类实现Callable接口
 * 2. 重写call()方法（有返回值，表示多线程运行的结果）
 * 3. 创建Callable实现类的对象（表示多线程要执行的任务）
 * 4. 创建FutureTask对象（用于管理多线程运行的结果）
 * 5. 创建Thread类的对象并启动（表示线程）
 */
public class ThreadDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 创建Callable任务实例
        MyCallable mc = new MyCallable();

        // 创建FutureTask对象，将Callable任务传入，用于获取线程执行结果
        FutureTask<Integer> ft = new FutureTask<>(mc);

        // 创建Thread对象，将FutureTask作为任务传入
        Thread t1 = new Thread(ft);

        // 启动线程，执行Callable任务
        t1.start();

        // 获取线程执行结果（调用get()方法会阻塞当前线程直到任务完成）
        System.out.println("1到100的累加和为：" + ft.get());
    }
}